android | 您所在的位置:网站首页 › android rssi › android |
我是 Android 编程的新手,正在尝试了解 BroadcastReceivers 的概念。为了帮助自己,我正在尝试编写一个监视 Wifi 信号强度的小应用程序。 现在,根据我的理解,我可以简单地等待接收系统广播的 RSSI_CHANGED_ACTION。 RSSI 应该经常更改,这意味着我应该经常收到此通知......但是,我从来没有收到过一次。我已将我的代码稀释到最低限度,因此它只会在收到通知时记录一条消息。 public class RssiActivity extends Activity { public BroadcastReceiver rssiReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Log.d("Rssi", "RSSI changed"); } }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public void onResume() { super.onResume(); registerReceiver(rssiReceiver, new IntentFilter(WifiManager.RSSI_CHANGED_ACTION)); Log.d("Rssi", "Registered"); } @Override public void onPause() { super.onPause(); unregisterReceiver(rssiReceiver); Log.d("Rssi", "Unregistered"); } }我已经看过这篇文章Android: How to monitor WiFi signal strength这似乎对我没有帮助。我也在这里尝试了代码示例 http://android-er.blogspot.com/2011/01/check-rssi-by-monitoring-of.html而且它也从不更新 RSSI 值。我很困惑为什么会这样。您能给我的任何帮助将不胜感激。谢谢! 最佳答案 所以,我遇到了和你一样的问题,想要在用户四处走动时更新 RSSI 值等,但我无法使用 RSSI_CHANGED_ACTION 解决它。 就像您遇到的问题一样,我的回调不会被正确调用。奇怪的是,它只在创建 Activity 时被调用一次,然后就再也没有调用过。 我的解决方法在您的 onCreate() 中,为 SCAN_RESULTS_AVAILABLE_ACTION 注册一个回调。然后调用 WifiManager.startScan()。 现在,在你的回调中,做: WifiManager wifiMan=(WifiManager)getActivity().getSystemService(Context.WIFI_SERVICE); int newRssi = wifiMan.getConnectionInfo().getRssi(); wifiMan.startScan();现在您有一个循环,其中回调启动扫描、接收结果并启动另一次扫描。 它很粗糙并且会消耗大量能量,但是,您可以在四处走动时观察 RSSI 值的变化。 完整代码(请注意,我使用 onResume 和 onPause 来注册和注销,所以它只会重复扫描,例如,当 Activity 在屏幕上时,会浪费电池) @Override public void onResume() { super.onResume(); //Note: Not using RSSI_CHANGED_ACTION because it never calls me back. IntentFilter rssiFilter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); this.registerReceiver(myRssiChangeReceiver, rssiFilter); WifiManager wifiMan=(WifiManager)getActivity().getSystemService(Context.WIFI_SERVICE); wifiMan.startScan(); } @Override public void onPause() { super.onPause(); this.unregisterReceiver(myRssiChangeReceiver); } /** * Broadcast receiver to update */ private BroadcastReceiver myRssiChangeReceiver = new BroadcastReceiver(){ @Override public void onReceive(Context arg0, Intent arg1) { WifiManager wifiMan=(WifiManager)getActivity().getSystemService(Context.WIFI_SERVICE); wifiMan.startScan(); int newRssi = wifiMan.getConnectionInfo().getRssi(); Toast.makeText(getActivity(), ""+newRssi, Toast.LENGTH_SHORT).show(); }};抱歉我来晚了,我只是想知道我必须解决你的问题:P 关于android - 应用程序永远不会收到 RSSI_CHANGED_ACTION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8717741/ |
CopyRight 2018-2019 实验室设备网 版权所有 |